package Song.Han.demo04;

/*
解决线程安全问题的第一种方案：同步代码块
格式：
    synchronized(锁对象){
        ...
        可能出现线程安全问题的代码
    }
注意：
    1.通过代码块中的锁对象，可以使用任意对象
    2.但是必须保证多个线程使用的锁对象是同一个
    3.锁对象的作用：
        把同步代码块锁住，只让线程在同步代码块中执行
*/
public class RunnableImpl01 implements Runnable {

    private int ticket = 100;
    //创建锁对象
    Object obj = new Object();

    @Override
    public void run() {
        //判断是否有票
        while (ticket > 0) {
            synchronized (obj) {
                if (ticket > 0) {
                    System.out.println(Thread.currentThread().getName() + "正在卖第" + ticket + "张票");
                    ticket--;
                }

            }
        }
    }

}
